/*
 * DataSetJDBM.java
 *
 * Created on September 26, 2007, 12:20 PM
 *
 */
package OLDSTUFF;

/**
 * Structure to contain featurized data  based on a JDBM HTree
 * @author Martin Haulrich
 */
public class DataSetJDBM { //implements DataSetSimple {

//    RecordManager recman;
//
//    HTree data;
//
//    /**
//     * Counter to keep track of next ID-number
//     */
//    Integer nextID;
//
//    /**
//     * Name of temporary JDBM-file used.
//     */
//    final String JDBMfilename;
//
//    int size;
//
//    /**
//     * Constructor.
//     */
//    public DataSetJDBM() throws DataSetException {
//
//        String name;
//
//        try {
//
//            File hfile = File.createTempFile("DataSet", "");
//            name = hfile.getName();
//            JDBMfilename = name;
//            hfile.delete();
//        } catch (IOException ex) {
//            throw new DataSetException("Could not create new file " + ex.getMessage());
//        }
//
//
//        try {
//
//            size = 0;
//            Properties props = new Properties();
//            props.setProperty(RecordManagerOptions.DISABLE_TRANSACTIONS, "true");
//
//            recman = RecordManagerFactory.createRecordManager(name, props);
//            data = HTree.createInstance(recman);
//            recman.setNamedObject("data", data.getRecid());
//
//            recman.commit();
//            nextID = 1;
//        } catch (IOException ex) {
//            throw new DataSetException("JDBM IOException" + ex.getMessage());
//        }
//    }
//
//    @Override
//    public int size() {
//
//        return size;
//    }
//
//    @Override
//    public Integer add(String[] features) throws DataSetException {
//        try {
//
//            Integer dataID = nextID;
//            nextID++;
//            size++;
//            data.put(dataID, features);
//            recman.commit();
//            return dataID;
//        } catch (IOException ex) {
//            throw new DataSetException("JDBM IOException" + ex.getMessage());
//        }
//    }
//
//    @Override
//    public void remove(Integer dataID) throws DataSetException {
//        try {
//            data.remove(dataID);
//            recman.commit();
//            size--;
//        } catch (IOException ex) {
//            throw new DataSetException("JDBM IOException" + ex.getMessage());
//        }
//    }
//
//    @Override
//    public DataIDs getDataIDs() throws DataSetException {
//
//        int[] idsArray = new int[size()];
//        int i = 0;
//        for (Iterator<Integer> it = keyIterator(); it.hasNext();) {
//            idsArray[i] = it.next();
//            i++;
//        }
//        DataIDs ids = new DataIDs(idsArray);
//
//        return ids;
//    }
//
//    @Override
//    public String[] getFeatures(Integer dataID) throws DataSetException {
//        try {
//
//            return (String[]) data.get(dataID);
//        } catch (IOException ex) {
//            throw new DataSetException("JDBM IOException" + ex.getMessage());
//        }
//    }
//
//    @Override
//    public Iterator<Integer> keyIterator() throws DataSetException {
//        return new DataSetKeyIterator();
//    }
//
//    @Override
//    public Iterator featuresIterator() throws DataSetException {
//        return new DataSetFeaturesIterator();
//    }
//
//    /**
//     * Class for the keyIterator
//     */
//    class DataSetKeyIterator implements Iterator<Integer> {
//
//        FastIterator iterator;
//
//        Integer nextElement;
//
//        /**
//         * Constructor
//         */
//        public DataSetKeyIterator() throws DataSetException {
//            try {
//                iterator = data.keys();
//                nextElement = null;
//            } catch (IOException ex) {
//                throw new DataSetException("JDBM IOException" + ex.getMessage());
//            }
//        }
//
//        @Override
//        public void remove() {
//            throw new UnsupportedOperationException("This Operation is not supported by this iterator");
//        }
//
//        @Override
//        public Integer next() {
//            if (nextElement == null) {
//                Integer elem = (Integer) iterator.next();
//                if (elem == null) {
//                    throw new NoSuchElementException();
//                } else {
//                    return elem;
//                }
//
//            } else {
//                Integer elem = nextElement;
//                nextElement = null;
//                return elem;
//            }
//        }
//
//        @Override
//        public boolean hasNext() {
//            if (nextElement == null) {
//                Integer elem = (Integer) iterator.next();
//                if (elem == null) {
//                    return false;
//                } else {
//                    nextElement = elem;
//                    return true;
//                }
//
//            } else {
//                return true;
//            }
//
//        }
//    }
//
//    class DataSetFeaturesIterator implements Iterator {
//
//        FastIterator iterator;
//
//        String[] nextElement;
//
//        /**
//         * Constructor
//         */
//        public DataSetFeaturesIterator() throws DataSetException {
//            try {
//                iterator = data.values();
//                nextElement = null;
//            } catch (IOException ex) {
//                throw new DataSetException("JDBM IOException" + ex.getMessage());
//            }
//        }
//
//        @Override
//        public void remove() {
//            throw new UnsupportedOperationException("This Operation is not supported by this iterator");
//        }
//
//        @Override
//        public String[] next() {
//            if (nextElement == null) {
//                String[] elem = (String[]) iterator.next();
//                if (elem == null) {
//                    throw new NoSuchElementException();
//                } else {
//                    return elem;
//                }
//
//            } else {
//                String[] elem = nextElement;
//                nextElement = null;
//                return elem;
//            }
//        }
//
//        @Override
//        public boolean hasNext() {
//            if (nextElement == null) {
//                String[] elem = (String[]) iterator.next();
//                if (elem == null) {
//                    return false;
//                } else {
//                    nextElement = elem;
//                    return true;
//                }
//
//            } else {
//                return true;
//            }
//
//        }
//    }
}
